// UNFINISHED
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+7;
char origin[3][3];
char que[N][3][3];
char mov[N][2];
int d[N];
int hh, tt;
int tot;
const int dx = {-1, 0, 1, 0};
const int dy = {0, 1, 0, -1};
unordered_set<int> s;
bool check(int x, int y, int i) {
  int x=mov[i][0], y=mov[i][1];
  return !(x<0 || y<0 || x>=3 || y>=3 || s.count(Hash(i)));
}
int Hash(int idx) {
  int x = 0;
  for(int i=0; i<3; ++i)
    for(int j=0; j<3; ++j) {
      x *= 10;
      char c = que[idx][i][j];
      if(c=='x') c = '0';
      x += c - '0';
    }
  return x;
}
void push(int m[3][3], int x ,int y, int dep) {
  for(int i=0; i<3; ++i)
    for(int j=0; i<3; ++j) {
      que[tt][i][j] = m[i][j];
    }
  mov[tt][0] = x, mov[tt][1] = y;
  d[tt] = dep;
  tt++;
}
bool arrive() {
  for(int i=0; i<3; ++i) {
    for(int j=0; j<3; ++j) {
      if(i==2&&j==2) return true;
      if(que[tt][i][j] != i*3+j+'1') {
        return false
      }
    }
  }
  assert(false); return true;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0); cout.tie(0);
  int lx, ly;
  for(int i=0; i<3; ++i) {
    for(int j=0; j<3; ++j) {
      cin>>origin[i][j];
      if(origin[i][j] == 'x') {
        lx = i, ly = j;
      }
    }
  }
  push(origin, lx, ly, 0);
  while(hh != tt) {
    int x = mov[hh][0], y=mov[hh][1], dep = d[hh];
    for(int i=0; i<4; ++i) {
      int nx=x+dx[i], ny=y+dy[i];
      if(arrive()) {
        cout<<d<<'\n';
        return;
      }
      if(!check(nx, ny, hh)) continue;
      push(
    }
  }
  return 0;
}

